#ifndef CJSONTEXTEDIT_H
#define CJSONTEXTEDIT_H

#include <QTextEdit>
#include "tools/cJSON.h"

class CJSONTextEdit : public QTextEdit
{
    Q_OBJECT
public:
    // 构造函数
    CJSONTextEdit(QWidget *parent = nullptr);
    // 析构资源
    virtual ~CJSONTextEdit()  {}
    // 对输入文本进行JSON解析，否则为普通的QTextEdit
    void setParseStatus(const bool bStatus);
    // 外部给入JSON文本并更新
    void updateText(std::string &strContext);
    // 获取原始数据
    bool getSourceData(std::string &strTextSrc);
    // 清空数据
    void clearAllData();

protected:
    // 监测加入的数据，并执行格式化
    void insertFromMimeData(const QMimeData *source) override;

private slots:
    // 监测文本变动
    void slt_textChanged();

private:
    // 插入JSON文本并格式化
    bool insertJSONText(std::string &strJson);
    // 逐行打印文本
    void printJsonInfo(cJSON *pObj, int depth);
    // 判断是否为文件，对于文件内容则读取文件数据
    bool isFileAndRead(std::string &strSrc);

private:
    bool                    m_bParseText;       // true：解析输入文本
    bool                    m_bTextChanged;     // 文本发生改变
    std::string             m_strTextSrc;       // 原始数据
};

#endif